home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 287_02 / hlcopy.asm < prev    next >
Assembly Source File  |  1989-05-23  |  3KB  |  106 lines

  1.         TITLE   VHLN of GDS
  2.         page    60,132
  3.         .SFCOND
  4. ;
  5. ; *==========================================================*
  6. ; * This file contain level 1 horizontal line, vertical line *
  7. ; * drawing and dot plotting routines                        *
  8. ; *==========================================================*
  9.  
  10. IFDEF   COLOR
  11.   IFDEF HERC
  12.    .err both display type defined
  13.   ENDIF
  14. else
  15.   IFNDEF HERC
  16.     HERC equ 0
  17.   ENDIF
  18. ENDIF
  19.  
  20. smo     equ     4       ; small model offset value
  21.  
  22. DGROUP  group   _DATA
  23. _DATA   segment word public 'DATA'
  24.         assume  ds:DGROUP
  25.         extrn   _STYLE:word
  26.         extrn   _DOTVALUE:word,_LEFTWORD:word,_RIGHTWORD:word
  27.  
  28.         extrn   wrtvec:word
  29.  
  30. _DATA   ends
  31.  
  32. _TEXT   segment byte public 'CODE'
  33.         assume  cs:_TEXT,ds:DGROUP
  34.  
  35.         public _hlcopy
  36.         extrn  $calc:near
  37.  
  38.  
  39. ; A C callable routine
  40. ;       hlcopy(sptr,dptr,startx,length);
  41. ;       char far *sptr, far *dptr;
  42. ;       int     startx,length;
  43. ;
  44. _hlcopy proc    near    ;public routine
  45.         push    bp
  46.         mov     bp,sp
  47.         push    si
  48.         push    di
  49.         mov     di,[bp+smo+8]   ; get starting x coordinate
  50.         and     di,0fh          ; get dot position within word
  51.         mov     si,di
  52.         add     di,[bp+smo+10]
  53.         shl     si,1
  54.         mov     ax,_LEFTWORD[si]
  55.         les     bx,dword ptr [bp+smo]     ; load sptr into es:bx
  56.         cmp     di,16           ; di > 16 if the line is not within the
  57.         ja      chl1            ; same word
  58.         shl     di,1            ; othwise the line is in the same word
  59.         xor     ax,_LEFTWORD[di]
  60.         and     ax,es:[bx]
  61.         les     bx,dword ptr [bp+smo+4]   ; load dptr into es:bx
  62.         pop     di
  63.         pop     si
  64.         pop     bp
  65.         jmp     wrtvec
  66. ; line span across more than 1 word
  67. chl1:   and     ax,es:[bx]
  68.         les     bx,dword ptr [bp+smo+4]   ; load dptr into es:bx
  69.         call    wrtvec
  70.         mov     cl,4            ; get the number of full words
  71.         mov     si,di           ; between first and last word
  72.         shr     si,cl
  73.         dec     si
  74.         jz      short chl2
  75.         mov     cx,si
  76. chl3:   les     bx,dword ptr [bp+smo]
  77.         inc     bx
  78.         inc     bx
  79.         mov     [bp+smo],bx
  80.         mov     ax,es:[bx]
  81.         les     bx,dword ptr [bp+smo+4]
  82.         inc     bx              ; repeat copying
  83.         inc     bx
  84.         mov     [bp+smo+4],bx
  85.         call    wrtvec
  86.         loop    short chl3
  87. chl2:   les     bx,dword ptr [bp+smo]     ; load sptr into es:bx
  88.         inc     bx              ; point to next word
  89.         inc     bx
  90.         and     di,0fh
  91.         shl     di,1
  92.         mov     ax,_RIGHTWORD[di]       ; set up last word
  93.         and     ax,es:[bx]
  94.         les     bx,dword ptr [bp+smo+4]
  95.         inc     bx
  96.         inc     bx
  97.         pop     di
  98.         pop     si
  99.         pop     bp
  100.         jmp     word ptr wrtvec
  101. _hlcopy endp
  102.  
  103. _TEXT   ends
  104.         end
  105.  
  106.